package com.nercel.dsj.gksales.util;

import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.util.ByteSource;

import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author sunlin
 * @date 2018-10-30
 */
public class StringUtil {
    public static String camel2Underline(String line) {
        StringBuilder result = new StringBuilder();
        if (line != null && line.length() > 0) {
            // 将第一个字符处理成小写
            result.append(line.substring(0, 1).toLowerCase());
            // 循环处理其余字符
            for (int i = 1; i < line.length(); i++) {
                String s = line.substring(i, i + 1);
                // 在大写字母前添加下划线
                if (s.equals(s.toUpperCase()) && !Character.isDigit(s.charAt(0))) {
                    result.append("_");
                }
                // 其他字符直接转成大写
                result.append(s.toLowerCase());
            }
        }
        return result.toString();
    }

    /**
     * 判断字符串是否是整数
     */
    public static boolean isInteger(String value) {
        try {
            Integer.parseInt(value);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 判断字符串是否是浮点数
     */
    public static boolean isDouble(String value) {
        try {
            Double.parseDouble(value);
            if (value.contains(".")) {
                return true;
            }
            return false;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 判断字符串是否是数字
     */
    public static boolean isNumber(String value) {
        return isInteger(value) || isDouble(value);
    }


    /**
     * 判断字符串是否是手机号
     */
    public static boolean isMobileNumber(String phone) {
        String regex = "^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(166)|(17[0,1,3,5,6,7,8])|(18[0-9])|(19[8|9]))\\d{8}$";
        if (phone.length() != 11) {
            return false;
        } else {
            Pattern p = Pattern.compile(regex);
            Matcher m = p.matcher(phone);
            return m.matches();
        }
    }

    /**
     * 生成密码
     * @param password
     * @param salt
     * @return
     */
    public static String encrypt(String password, String salt) {
        return new SimpleHash("md5", password, ByteSource.Util.bytes(salt), 1).toHex();
    }

    public static String randomUUID() {
        return UUID.randomUUID().toString();
    }


}
